package cn.highedu.spring;

import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.ArrayList;
import java.util.List;

@Component // 把当前类的对象交给Spring管理 标识(id)是:tagService
//@Scope("prototype") // 声明当前类的对象为原型模式(多例模式)
public class TagService {
    private final List<String> tags = new ArrayList<>();
    public TagService() {
        System.out.println("对象被创建");
    }
    // 当前类的对象实例化之后立即调用该方法 被标记的方法在一个对象的生命周期内只会调用一次
    @PostConstruct
    public void initTags() {
        tags.add("射手");
        tags.add("法师");
        tags.add("刺客");
        tags.add("战士");
        tags.add("坦克");
        System.out.println("初始化角色:" + tags.toString());
    }

    public List<String> getTags() {
        return tags;
    }

    // 销毁对象方法
    @PreDestroy // Spring容器关闭之前 自动调用被@PreDestroy注解标记的方法 注意:只有@Scope("Singleton")才有效
    public void destroy() {
        System.out.println("清除角色缓存:" + tags.toString());
        tags.clear(); // 清空集合
    }

}
